#ifndef REPEAT_SCHEDULER_H
#define REPEAT_SCHEDULER_H

#include "abstract_scheduler.h"

namespace scheduler
{
/**
 * @brief:  重复执行，直到以下条件完成其中一个：
 * 1、失败
 * 2、执行次数>=重复次数
 *
 * @note:   retry次数如果不设置，则默认执行1次，次此时，该策略无任何作用
 * @author: sherlock_lht
 */
class RepeatScheduler: public AbstractScheduler
{
public:
    explicit RepeatScheduler(const std::string &name);
    explicit RepeatScheduler(const std::string &name, int repeat_count);
    ~RepeatScheduler() override;

    /**
     * @brief:  设置/获取重复次数
     * @author: sherlock_lht
     */
    void setRepeatCount(int32_t count);
    int32_t getRepeatCount() const;

    [[deprecated("repeat scheduler cannot add task")]] bool appendTask(const task::AbstractTaskConstPtr &task) override;

    [[deprecated("repeat scheduler cannot add scheduler")]] bool appendScheduler(const AbstractSchedulerConstPtr &scheduler) override;
};

}

#endif //REPEAT_SCHEDULER_H
